home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / program / fixtree3.arc / FIXTREE.C < prev    next >
C/C++ Source or Header  |  1988-01-24  |  14KB  |  337 lines

  1. /****************************************************************/
  2. /*      FIXTREE  -  by Guy L. Albertelli                        */
  3. /*                      4142 Highland Dr.                       */
  4. /*                      Mogadore, Oh.  44260                    */
  5. /*                                                              */
  6. /*      ************  SHAREWARE   ************                  */
  7. /*                                                              */
  8. /*      for the benefit of the ST community                     */
  9. /*                                                              */
  10. /*      ************  SHAREWARE   ************                  */
  11. /*                                                              */
  12. /*      This set of routines will convert a resource file       */
  13. /*      in source format (.RSH) that has been compiled and      */
  14. /*      linked with these routines to a working resource file   */
  15. /*      for GEM. Conceptually this could eliminate the need     */
  16. /*      for RSC files (provided the compiler can compile the    */
  17. /*      necessary code.                                         */
  18. /*                                                              */
  19. /*      USAGE:                                                  */
  20. /*              After the appl_init call, call fix_tree with    */
  21. /*      the symbol NUM_TREE as a parameter. That symbol is      */
  22. /*      defined in the .RSH file. After that call all the       */
  23. /*      rsrc_ calls are valid except rsrc_load and rsrc_free.   */
  24. /*      If you want to load a new resource file then call       */
  25. /*      unfix_tree() to remove the effects of fix_tree.         */
  26. /*                                                              */
  27. /*      NOTE: Never call fix_tree twice, all hell will break    */
  28. /*              loose.                                          */
  29. /*                                                              */
  30. /****************************************************************/
  31.  
  32. /****************************************************************/
  33. /*      Modified by Chor-ming Lung              12/23/87        */
  34. /*      for Megamax and Mark Williams C                         */
  35. /*                                                              */
  36. /*      I think this file was written for Alcyon C.             */
  37. /*      The problems that Mark Williams C and Megamax C         */
  38. /*      encounter with this file are :                          */
  39. /* 1.   Some int and long items are actually pointer of         */
  40. /*      something else.                                         */
  41. /* 2.   rs_tedinfo[].te_ptext/te_ptmplt/te_pvalid in .C file    */
  42. /*      generated by RCS are integer index for rs_strings.      */
  43. /*      Actually, their definitions are char pointers. But,     */
  44. /*      rs_tedinfo[k].te_ptext=rs_strings[rs_tedinfo[k].te_ptext*/
  45. /*      is not acceptable.                                      */
  46. /* 3.   rs_object[].ob_spec is a long number in Mark William C. */
  47. /*      It is a char pointer in Megamax C.                      */
  48. /* Note: The offending codes have been commented out            */
  49. /* Note: Mark Williams' C preprocessor defines GEMDOS,M68000    */
  50. /*      That is the way to handle problem 3.                    */
  51. /****************************************************************/
  52.  
  53. /****************************************************************/
  54. /*      Note from Jinfu Chen                      1/23/88       */
  55. /*      Thanks to Lung for fixing the codes.                    */
  56. /*      However, he left out the char pointer typecast  for MMC */
  57. /*      so the text info still didn't work when compiled under  */
  58. /*      MMC. Fix is simple, just change the fix_tree2 to char   */
  59. /*      pointer instead of int                                  */
  60. /****************************************************************/
  61.  
  62. /****************************************************************/
  63. /* INCLUDE FILES                                                */
  64. /****************************************************************/
  65.  
  66. /* original include files for Alcyon C ?
  67. #include "portab.h"
  68. #include "obdefs.h"
  69. #include "define.h"
  70. #include "gemdefs.h"
  71. */
  72.  
  73. #include <portab.h>
  74. #include <obdefs.h>
  75. #include <gemdefs.h>
  76.  
  77. /****************************************************************/
  78. /* RESOURCE DATA                                                */
  79. /****************************************************************/
  80.  
  81. extern  BYTE *rs_strings[];
  82. extern  LONG rs_frstr[];
  83. extern  BITBLK rs_bitblk[];
  84. extern  LONG rs_frimg[];
  85. extern  ICONBLK rs_iconblk[];
  86. extern  TEDINFO rs_tedinfo[];
  87. extern  OBJECT rs_object[];
  88. extern  LONG rs_trindex[];
  89. extern  struct foobar {
  90.         WORD    dummy;
  91.         WORD    *image;
  92.         } rs_imdope[];
  93.  
  94. /****************************************************************/
  95. /* EXTERNALS                                                    */
  96. /****************************************************************/
  97.  
  98. extern WORD     global[];
  99.  
  100. /****************************************************************/
  101. /*      Take the .RSH code from the RCS output and make it a    */
  102. /*      usable set of resource trees.  This code will do the    */
  103. /*      basic items that rsrc_load() would do without requiring */
  104. /*      a file to load.                                         */
  105. /*                                                              */
  106. /* INPUT:                                                       */
  107. /*      num     number of trees in .RSH file (NUM_TREE)         */
  108. /****************************************************************/
  109. /****************************************************************/
  110. /* Note from Lung:                                              */
  111. /*      My RCS can generate .C code but no .RSH code. The file  */
  112. /*      SAMPLE.RSH seems not correct. I use RCS to generate     */
  113. /*      .C file and recompile FIXTRTST.C. It runs flawlessly.   */
  114. /****************************************************************/
  115.  
  116. fix_tree(num)
  117. WORD    num;
  118. {
  119. /*
  120.         LONG *pl;
  121. */
  122.         WORD i,j;
  123.         long fix_tree3();
  124.  
  125.  
  126.         fix_tree1( &global[5], &rs_trindex[0]);
  127. /*      pl = &global[5];
  128.         *pl = &rs_trindex;
  129. */
  130.         for (i=0;i<num;i++){
  131.                 j = rs_trindex[i];      /* get index of top obj in tree */
  132. /*              rs_trindex[i] = &rs_object[j];
  133. */              rs_trindex[i] = fix_tree3(&rs_object[j]);
  134.                 fix_object(i,j,j);      /* fix top object then all rest */
  135.                 fix_level(i,rs_object[j].ob_head,rs_object[j].ob_tail,j);
  136.         }
  137. }
  138.  
  139. /****************************************************************/
  140. /*      This routine will clear the pointer to the resource     */
  141. /*      tree so that GEM doesn't try to free the memory         */
  142. /****************************************************************/
  143. unfix_tree()
  144. {
  145. /*      LONG *pl;
  146.         pl = &global[5];
  147.         *pl = 0L;
  148. */
  149.         fix_tree1(&global[5],0L);
  150. }
  151.  
  152. /****************************************************************/
  153. /*      This routine will cycle across a level in the resource  */
  154. /*      tree and fix each object in that level. After fixing    */
  155. /*      up the object, it will use itself (recursion) to fix    */
  156. /*      any objects on a level below.                           */
  157. /*                                                              */
  158. /* INPUT:                                                       */
  159. /*      tr_x    index in rs_trindex of the tree being done      */
  160. /*              needed by fix_object                            */
  161. /*      h       object number within tree of first item in      */
  162. /*              this level                                      */
  163. /*      t       object number within tree of last item in       */
  164. /*              this level                                      */
  165. /*      to      object number within rs_object of first         */
  166. /*              item in tree                                    */
  167. /*******************************